/**
 * 项目名称:显示界面
 *
 * Java企业级开发
 * 3层结构
 * dao层：持久层，对数据的增删改查
 * service层：业务逻辑层，对数据进行处理，调用dao层，被web层/view层调用
 * web层：表现层，接收客户端传过来的数据，调用service层
 *
 * com.hx.domain/bean
 * 实现类：类中的属性和数据库中的字段一致
 * com.hx.dao
 * 接口：提供的一套方法
 * dao.impl
 * 接口的实现类：重写接口中的方法
 * com.hx.service
 * 接口：一般和dao层的接口一致
 * service.impl
 * 接口的实现类：重写接口中的方法
 * com.hz.web/view
 * 作用：接收页面传来的数据，调用service层
 *
 * @Author: 夏国倩
 * @Date: 2023/10/17 10:20
 * @Copyright
 */
package itSystemCase7.view;
import itSystemCase7.domain.QQBean;
import itSystemCase7.service.QQService;
import itSystemCase7.tools.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class MainView {
    //本项目View 依赖Service
    private QQService QQService =new QQService();
    //编写run方法
    //1.1完成功能界面的菜单显示
    //1.2接收键盘输入的功能选项
    //1.3根据选项值，调用对应的功能方法

    /**
    运行方法
     */
    public void run(){

        //用户登录
        administratorIdentity();

        /*
        打印菜单，获取用户输入，调用对应方法
         */
        Scanner in=new Scanner(System.in);
        boolean flag=true;
        while (flag){
            System.out.println("*************欢迎登录QQ用户信息管理系统****************");
            System.out.println("-------------------请选择操作键----------------------");
            System.out.println("1.显示用户信息  2.更新在线天数  3.添加用户  4.更新用户等级  5.删除用户  6.退出");
            System.out.print("请输入要操作的功能序号[1~6]：");
            int op= in.nextInt();
            switch (op){
                case 1:
                    //显示用户信息
                    showUser();
                    break;
                case 2:
                    //更新在线天数
                    updateOnlineDays();
                    break;
                case 3:
                    //添加用户
                    addUser();
                    break;
                case 4:
                    //更新用户等级
                    updateUserLevel();
                    break;
                case 5:
                    //删除用户
                    deleteUser();
                    break;
                case 6:
                    //退出
                    System.out.println("是否退出（Y/N）");
                    String i=in.next();
                    if (i.equalsIgnoreCase("Y")){
                        System.out.println("再见！");
                        flag=false;
                        break;
                    }
                    continue;
                default:
                    //当输入其他数字，提示输入错误
                    System.out.println("输入错误！");
            }
        }
    }

    /**
     * 更新用户等级
     */
    private void updateUserLevel() {
//        List<QQBean> QQList2= QQService.showUser();
//        print2(QQList2);
        print2(QQService.showUser());

    }

    /**
     * 更新用户等级
     */
    private void print2(List<QQBean> QQList2) {
        System.out.println("-------------开始更新------------");
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = null;
        int a=0;
        int temp=0;
        int count=0;
            try {
                conn = DBUtil.getConnection();
                //更新用户等级
                sql = "update userinfo set  LevelId=? where UserId=?";
                ps = conn.prepareStatement(sql);
                for (QQBean qq:QQList2){
                    if (qq.getOnLineDay()<5){
                        a=1;
                    }else if (qq.getOnLineDay()>=5 && qq.getOnLineDay()<32){
                        a=2;
                    }else if (qq.getOnLineDay()>=32 && qq.getOnLineDay()<320){
                        a=3;
                    }else {
                        a=4;
                    }
                    ps.setInt(1,a);
                    ps.setDouble(2,qq.getUserId());
                    count+=ps.executeUpdate();
                    temp++;
                }
                System.out.println(temp==count?"更新成功":"更新失败");

            } catch(Exception e){
                e.printStackTrace();
            } finally{
                DBUtil.close(conn, ps, rs);
            }
        System.out.println("-------------更新结束------------");
    }

    /**
     * 更新在线天数
     */
    private void updateOnlineDays() {
        //1.键盘输入要编辑的用户编号 UserId
        Scanner sc=new Scanner(System.in);
            System.out.print("请输入要编辑的用户编号： ");
            int id = sc.nextInt();
        //2.键盘输入要修改的在线天数
        //System.out.print("请输入新的在线天数:  ");
        //int hh=sc.nextInt();
        //3.调用UserService类中的updateOnLineDays方法，用来指定的在线天数信息进行更新
         QQService.updateOnLineDays(id);
        //4.更新完毕后，使用输出语句，提示“修改成功！”
        System.out.println("修改成功！");
    }

    /**
     * 显示用户信息
     */
    private void showUser() {
        List<QQBean> QQList = QQService.showUser();
           //打印print
        print(QQList);
    }

    /**
     * 验证管理员身份
     */
    private void administratorIdentity(){
        boolean flag=false;
        while (!flag){
            Scanner sc=new Scanner(System.in);
            System.out.print("请输入用户名：");
            String name=sc.next();
            System.out.print("请输入密码：");
            String password=sc.next();

            Connection conn=null;
            PreparedStatement ps=null;
            ResultSet rs=null;
            try{
                conn= DBUtil.getConnection();
                String sql="select * from admin where loginId=? and loginPwd=?";
                ps= conn.prepareStatement(sql);
                ps.setString(1,name);
                ps.setString(2,password);
                rs=ps.executeQuery();
                if (rs.next()){
                    System.out.println("登录成功！");
                    flag=true;
                }else {
                    System.out.println("登录失败，输入无效！");
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                DBUtil.close(conn,ps,rs);
            }
        }
    }

    /**
     * 删除用户
     */
    private void deleteUser() {
        //1.键盘输入要删除的用户编号
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入要删除的用户编号：");
        int id=sc.nextInt();
        //2.调用QQService类中的deleteUser()方法，完成删除功能
        QQService.deleteUser(id);
        System.out.println("删除成功!");
    }


    /**
     * 添加用户
     */
    private void addUser() {
        /*
        1.获取用户输入，封装到bean中
        2.调用service的addUser()方法完成添加功能
         */
        Scanner in=new Scanner(System.in);
        QQBean qq=new QQBean();
        System.out.print("请输入用户昵称：");
        qq.setUserName(in.next());
        while (true) {
            System.out.print("请输入用户密码：");
                String pwd = in.next();
                if (pwd.length() >= 6) {
                    qq.setUserPwd(pwd);
                    break;
                } else {
                System.out.println("您输入的密码不符合，请重新输入！");
            }
        }
        System.out.print("请输入用户等级：");
        qq.setLevelId(in.nextInt());
        while (true) {
            System.out.print("请输入用户邮箱地址：");
                String email = in.next();
                if (email.contains("@")) {
                    qq.setEmail(email);
                    break;
                }else {
                System.out.println("您输入的邮箱格式不正确，请重新输入");
            }
        }
        while (true){
            System.out.print("请输入在线天数：");
            try{
                int day=in.nextInt();
                if (day>0){
                    qq.setOnLineDay(day);
                    break;
                }
            }catch (InputMismatchException e) {
                System.out.println("您输入的天数不正确，请重新输入");
            }
        }

        QQService.addUser(qq);
        System.out.println("插入成功！");
    }

    /**
     * 输出用户信息方法
     */
    private void print(List<QQBean> QQList){
        System.out.println("UserId\tUserName\t\tUserPwd\t\tLevelId\t\tEmail\t\t\tOnLineDay");
        String levelName=null;
        for (QQBean qq:QQList){
            if (1==qq.getLevelId()){
                levelName="_";
            }else if (2==qq.getLevelId()){
                levelName="⭐";
            }else if (3==qq.getLevelId()){
                levelName="🌙";
            }else if (4==qq.getLevelId()){
                levelName="☀";
            }
            System.out.println(qq.getUserId()+"\t\t"+qq.getUserName()+"\t\t\t"+qq.getUserPwd()+"\t\t"+
                    levelName+"\t\t"+qq.getEmail()+"\t\t"+qq.getOnLineDay());
        }
    }
}
